iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Modern Web

關於寫react 那二三事系列 第 16

Day16 PrimeReact 的tables(6)

  • 分享至 

  • xImage
  •  

今天然大爆炸,內心突然陰暗,
專案還沒看到頭,下一個已經排好等著了
草...又我...
小夥伴...為什麼可以這麼快樂,
快樂的等著出國去旅遊,順手改改寫鐵人賽文章...
沒有專案,沒有開會,沒有壓力
而我...
趕專案=>午休寫鐵人賽文章 =>繼續趕專案=>加班趕專案加準備下拜一開會資料=>寫鐵人賽文章

我覺得自己要過勞了,明明同天一起進公司T_T
甚麼時候才能像他體會到沒有專案圍繞的快樂,
我一點也不想被太看得起,我只想當鹹魚

今天睜開眼,我在思考...要不擺爛吧?
明明文件很爛,明明後端給的api根本打不到,
一直被拖工期,串接只能盲改,
工期只剩一半,文件格式還是錯的,
參數名稱沒統一規格,
一下全大寫,一下大寫駝峰,一下大寫加底線,
就連簡單的傳給後端的日期格式都沒搞定,

待確認項目欄位永遠是空白的,
封面的更新日期有一直刷新,
但是更改紀錄永遠停在上個月的某一天,
然後另一份就更過分了,
敘述錯的截圖錯的(只有小小一行待補),
帳號權限空白,
然後一個禮拜過後跟我說...這份~不、會、再、更、新、囉~

而前端卻工期沒延長,還一直縮短工期,
正在苦思為什麼無法打api登入,
後端說 喔,登入task沒被安排阿...
登入task沒被安排阿...
登入task沒被安排阿...

這是正常的TEAM能做得出來的事?

要是知道這裡的SA這麼好當,
當初去面SA也不錯

還是因為前端比較低端?
拿來壓的?

我另一半說其實說職場鬼故事,
說不定都比寫這類文章還受歡迎

好了...扯遠了....

如果有寫ts 應該會發現官方文件有點錯誤
interface的部分

interface Country {
    name: string;
    code: string;
}

interface Representative {
    name: string;
    image: string;//如果引用官方資料應該將code改為image
}

export interface Customer {
    id: number;
    name: string;
    country: Country;
    company: string;
    date: string;
    status: string;
    verified: boolean;
    activity: number;
    representative: Representative;
    balance: number;
}

引入資料跟元件以及interface

import { DataTable, DataTableExpandedRows } from 'primereact/datatable';
import { Column } from 'primereact/column';
import { CustomerService } from '../service/custom';
import { Customer } from '../interfaces/table';

Table6.tsx

import React, { useEffect, useState } from 'react';
import { DataTable, DataTableExpandedRows } from 'primereact/datatable';
import { Column } from 'primereact/column';
import { CustomerService } from '../service/custom';
import { Customer } from '../interfaces/table';
const Tables6Compnent: React.FC = () => {
  const [customers, setCustomers] = useState<Customer[]>([]);
  const [expandedRows, setExpandedRows] = useState<DataTableExpandedRows | Customer[]>([]);

  useEffect(() => {
    CustomerService.getCustomersMedium().then((data) => setCustomers(data));
  }, []);

  const headerTemplate = (data: Customer) => {
    return (
      <React.Fragment>
        <img alt={data.representative.name} src={`https://primefaces.org/cdn/primereact/images/avatar/${data.representative.image}`} width="32" style={{ verticalAlign: 'middle' }} className="ml-2" />
        <span className="ml-2">{data.representative.name}</span>
      </React.Fragment>
    );
  };

  const footerTemplate = (data: Customer) => {
    return (
      <React.Fragment>
        <td colSpan={5}>
          <div className="d-flex justify-content-end" >Total Customers: {calculateCustomerTotal(data.representative.name)}</div>
        </td>
      </React.Fragment>
    );
  };

  const countryBodyTemplate = (rowData: Customer) => {
    return (
      <div className="d-flex align-items-center">
        <span>{rowData.country.name}</span>
      </div>
    );
  };

  const calculateCustomerTotal = (name: string) => {
    let total = 0;
    if (customers) {
      for (let customer of customers) {
        if (customer.representative.name === name) {
          total++;
        }
      }
    }
    return total;
  };

  return (
    <div>
      <DataTable value={customers} rowGroupMode="subheader" groupRowsBy="representative.name"
        sortMode="single" sortField="representative.name"
        expandableRowGroups expandedRows={expandedRows} onRowToggle={(e) => setExpandedRows(e.data)}
        rowGroupHeaderTemplate={headerTemplate} rowGroupFooterTemplate={footerTemplate} >
        <Column field="name" header="Name" />
        <Column field="country.name" header="Country" />
        <Column field="company" header="Company" />
      </DataTable>
    </div>

  );
}
export default Tables6Compnent;

rowGroupMode rowgroup顯示樣式
-> subheader 以groupRowsBy為header 群組內資料為 subheader顯示
如果覺得subheader資料太多可以用expandableRowGroups 進行收合

-> rowspan 將groupRowsBy設定的欄位進行群組合併

groupRowsBy
希望群組的項目

sortField
如果來源的資料原本沒有依照自己希望的groupRowsBy的設定依序創建,
就要記得進行排序

※切記要連貫,否則會失效

好了row group就介紹到這


上一篇
Day15 PrimeReact 的tables(5)
下一篇
Day17 PrimeReact 的tables(7)
系列文
關於寫react 那二三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言